const router = require('koa-router')()
const { M_user } = require('../models')
const { C_user } = require('../controller/index')

const util = require('../utils/index') // 工具函数

router.prefix('/users')

// 用户注册
router.post('/register', async ctx => {
  let { username, password } = ctx.request.body

  // 去除空格
  username = util.delTrim(username)
  password = util.delTrim(password)

  // 获取注册时间
  let register_time = util.nowDate(1)

  // 账号校验
  if(!C_user.judge_username(username, ctx).status) {
    return C_user.judge_username(username, ctx).ctx
  }

  // 密码校验
  if(!C_user.judge_password(password, ctx).status) {
    return C_user.judge_password(password, ctx).ctx
  }

  // 校验数据库是否存在该账号
  let result = await M_user.findOne({ username })
  if(result) {
    return ctx.body = {
      status: false,
      msg: '该账号已存在'
    }
  }

  await C_user.user_create({ username, password, register_time }, ctx)
})

// 用户修改
router.post('/update', async ctx => {
  let params = ctx.request.body

  // 修改时间
  let update_time = util.nowDate(1)
  params.update_time = update_time

  // 账号校验
  if(params.username) {
    if(!C_user.judge_username(params.username, ctx).status) {
      return C_user.judge_username(params.username, ctx).ctx
    }

    // 校验数据库是否存在该账号
    let result = await M_user.findOne({ username: params.username })
    if(result) {
      return ctx.body = {
        status: false,
        msg: '该账号已存在'
      }
    }
  }

  // 密码校验
  if(params.password || params.password == 0) {
    if(!C_user.judge_password(params.password, ctx).status) {
      return C_user.judge_password(params.password, ctx).ctx
    }
  }
  
  await C_user.user_update(params, ctx)
})

// 修改用户信息
router.post('/update_user', C_user.user_update)

// 用户删除
router.post('/del', async ctx => {
  let { _id } = ctx.request.body

  await C_user.user_del({_id}, ctx)
})

// 用户查询
router.get('/find', async ctx => {
  let params = ctx.request.query
  await C_user.user_search(params, ctx)
})

// 用户登录
router.post('/login', async ctx => {
  let { username, password } = ctx.request.body

  // 账号校验
  if(!C_user.judge_username(username, ctx).status) {
    return C_user.judge_username(username, ctx).ctx
  }

  // 密码校验
  if(!C_user.judge_password(password, ctx).status) {
    return C_user.judge_password(password, ctx).ctx
  }

  await C_user.user_login({ username: username.trim(), password: password.trim() }, ctx)
})

module.exports = router
